package dao

import (
	"time"
)

// 这是 Groupon 的全局公开dao对象，被service层调用!
var GrouponDao = grouponDao{}

// 团购活动表
// 这是 groupon表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Groupon struct {
	Id              int32     `json:"id" form:"id" v:"id" db:"id"`
	OrderId         int32     `json:"order_id" form:"order_id" v:"order_id" db:"order_id"`                                     // 关联的订单ID
	GrouponId       int32     `json:"groupon_id" form:"groupon_id" v:"groupon_id" db:"groupon_id"`                             // 如果是开团用户，则groupon_id是0；如果是参团用户，则groupon_id是团购活动ID
	RulesId         int32     `json:"rules_id" form:"rules_id" v:"rules_id" db:"rules_id"`                                     // 团购规则ID，关联litemall_groupon_rules表ID字段
	UserId          int32     `json:"user_id" form:"user_id" v:"user_id" db:"user_id"`                                         // 用户ID
	ShareUrl        string    `json:"share_url" form:"share_url" v:"share_url" db:"share_url"`                                 // 团购分享图片地址
	CreatorUserId   int32     `json:"creator_user_id" form:"creator_user_id" v:"creator_user_id" db:"creator_user_id"`         // 开团用户ID
	CreatorUserTime time.Time `json:"creator_user_time" form:"creator_user_time" v:"creator_user_time" db:"creator_user_time"` // 开团时间
	Status          int16     `json:"status" form:"status" v:"status" db:"status"`                                             // 团购活动状态，开团未支付则0，开团中则1，开团失败则2
	AddTime         time.Time `json:"add_time" form:"add_time" v:"add_time" db:"add_time"`                                     // 创建时间
	UpdateTime      time.Time `json:"update_time" form:"update_time" v:"update_time" db:"update_time"`                         // 更新时间
	Deleted         int8      `json:"deleted" form:"deleted" v:"deleted" db:"deleted" gm:"deleted"`                            // 逻辑删除

}

// 注意:这是 Groupon 的私有dao对象，只能在dao层内使用!
type grouponDao struct {
	InsertTemplate func(arg Groupon) (int64, error)         //插入一条记录
	UpdateTemplate func(arg Groupon) (int64, error)         //更新一条记录
	DeleteTemplate func(id int64) (int64, error)            `args:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Groupon, error)          `args:"id"` //根据传入的主键获取一条记录
	List           func(arg GrouponList) ([]Groupon, error) //模糊分页查询
}

/*
// 这是 groupon 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type GrouponPostman struct {
id
order_id
groupon_id
rules_id
user_id
share_url
creator_user_id
creator_user_time
status
add_time
update_time
deleted

}*/

// 这是 groupon 表的批量请求参数
type GrouponReq struct {
	List []Groupon `json:"list" form:"list"`
}

// 这是 grouponDao.List()方法的请求参数
type GrouponList struct {
	Page
}
